package MediciADistanza.Control.User.Module;

import javax.swing.JInternalFrame;

import MediciADistanza.Entity.User.ModelData.DatiModulo;
import MediciADistanza.Entity.Conferma;
import MediciADistanza.Entity.GeneraPSWCasuale;
import MediciADistanza.Control.User.UtenteControl;


/**
 * Gestisce la visualizzazione e l'invio dei moduli
 * Si tratta di una classe astratta che verr&agrave; in seguito
 * per implementare le classi che avranno la necessit&agreve; di inviare moduli
 * 
 * 
 *  <p>Semi-implementata</p>
 *  
 *  @author Andrea Iann&igrave;
 */
public abstract class ModuleControl {
	/**
	 * Sto aspettando qualche conferma
	 */
	protected boolean imWaiting;
	/**
	 * Conferma dell'operazione
	 */
	protected Conferma conferma;
	/**
	 * Dati da inviare
	 */
	protected DatiModulo datiModulo;
	/**
	 * Control principale utente
	 */
	protected UtenteControl utenteControl;
	/**
	 * Interfaccia del modulo
	 */
	protected JInternalFrame frameModulo;
	/**
	 * idRichiesta
	 */
	protected String requestID;
	/**
	 * Funzione principale che viene chiamata dall'interfaccia per l'invio dei moduli
	 */
	public void sendModule(){
		if (datiModulo!=null) {
			requestID = GeneraPSWCasuale.generaPSW(15);
			datiModulo.addRequestID(requestID);
			utenteControl.invia(datiModulo);
		}
	}
	/**
	 * Costruttore della classe
	 * @param controlPrincipale	<p>Si tratta del control principale dell'utente che crea il modulo</p>
	 */
	public ModuleControl (UtenteControl controlPrincipale) {
		this.utenteControl = controlPrincipale;
		imWaiting = false;
	}
	/**
	 * Imposta la conferma di invio modulo
	 * 
	 * @param conferma	<p>Conferma ricevuta dal server</p>
	 */
	public void setConferma(Conferma conferma) {
		this.conferma = conferma;
	}
	/**
	 * Comando d'uscita dall'attuale modulo
	 */
	public abstract void exit();
	/**
	 * Restituisce il frame da inserire nell'interfaccia principale
	 * @return	Frame Interfaccia
	 */
	public JInternalFrame getFrameModulo() {
		return frameModulo;
	}
}

